<?php

namespace User\Service;

use User\Api\UserApi;

class UserService extends Service
{
    /**
     * 用到的便加入缓存
     * @var array 分类列表
     */
    private static $list;
    
    private static $cacheKey = 'sys_active_user_list';
    
    /**
     * 根据uid取一条用户信息,只包含最基础的字段 username email mobile nickname
     * @param int $uid
     * @return array
     */
    public static function one($uid)
    {
        if (!($uid && is_numeric($uid))) { // 获取当前登录用户名
            return [];
        }
        
        /* 获取缓存数据 */
        if (empty(static::$list)) {
            static::$list = S(static::$cacheKey);
        }

        /* 查找用户信息 */
        $key = "u{$uid}";
        if (isset(static::$list[$key])) { // 已缓存，直接使用
            return static::$list[$key];
        }
        
        // 调用接口获取用户信息
        $info = (new UserApi())->info($uid);
        if (!$info) {
            return [];
        }
        $nickname = M('Member')->getFieldByNickname($uid);
        
        list($_, $user['username'], $user['email'], $user['mobile']) = $info;
        $user['nickname'] = $nickname ?: '';
        
        static::$list[$key] = $user;
        
        /* 缓存用户 */
        $count = count(static::$list);
        while ($count -- > (int) C('USER_MAX_CACHE')) {
            array_shift(static::$list);
        }
        S(static::$cacheKey, static::$list, ['expire' => 86400]);
        
        return static::$list[$key];
    }
    
    public static function field($uid, $field)
    {
        $one = static::one($uid);
        
        return isset($one[$field]) ? $one[$field] : '';
    }

    /**
     * 根据用户ID获取用户名
     * 
     * @param integer $uid 用户ID
     * @return string 用户名
     */
    public static function username($uid)
    {
        return static::field($uid, 'username');
    }

    /**
     * 根据用户ID获取用户昵称
     * 
     * @param integer $uid 用户ID
     * @return string 用户昵称
     */
    public static function nickname($uid)
    {
        return static::field($uid, 'nickname');
    }

}
